package com.bruce.tool;

import java.security.MessageDigest;

import org.springframework.stereotype.Service;

/**
 *转自 http://www.weixuehao.com/
 * message-digest algorithm 5（信息-摘要算法）
 * md5的长度，默认为128bit，也就是128个 0和1的 二进制串 。
 * 128/4 = 32 换成 16进制 表示后，为32位了。
 */
@Service
public class MD5Util {

	// 测试方法
//    public static void main(String[] args) {
//    	MD5Util MD5Utilimpl = new MD5Util();
//        String pwd = "123456";
//        System.out.println("加密前： " + pwd);
//        long t1 = System.currentTimeMillis();
//        System.err.println("加密后： " + MD5Utilimpl.setPswd(pwd));
//        long t2 = System.currentTimeMillis();
//        System.out.println(t2-t1);
//    }

    /**
     * 设置密码加密
     * @param message
     * @return
     */
     public String setPswd(String message){
        for ( int k = 512; k> 0; k--){
            message = getMD5(message);
        }
        return  message;
    }

    /**
     * 生成md5
     * @param message
     * @return
     */
     private String getMD5(String message) {
        String md5str = "";
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");

            byte[] input = message.getBytes();

            byte[] buff = md.digest(input);

            md5str = bytesToHex(buff);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return md5str;
    }

    /**
     * 二进制转十六进制
     * @param bytes
     * @return
     */
    private  String bytesToHex(byte[] bytes) {
        StringBuffer md5str = new StringBuffer();
        int digital;
        for (int i = 0; i < bytes.length; i++) {
            digital = bytes[i];

            if (digital < 0) {
                digital += 256;
            }
            if (digital < 16) {
                md5str.append("0");
            }
            md5str.append(Integer.toHexString(digital));
        }
        return md5str.toString().toUpperCase();
    }
}